var express = require('express');
var router = express.Router();
var config = require('./../config')
var axios = require('axios');
var qrcode = require('qrcode')
var { getNoncestr, getSign, getXml, xml2js } = require('./../utils/tools')

router.get('/', function(req,res, next) {
    res.send('支付相关接口')
})

/**
 * @api {get} /api/pay/payment 生成支付二维码
 * @apiName GetPayPayment
 * @apiGroup pay
 * 
 * @apiParam { String } body 支付描述
 * @apiParam { String } out_trade_no 支付编号
 * @apiParam { number } total_fee 总价
 * 
 * @apiSuccessExample {json} Success-Response:
 *  res.send({
      code: '200',
      message: '生成支付二维码',
      data
    })
 * @apiSampleRequest /api/pay/payment
 * @apiVersion 0.0.0
 */
router.get('/payment', (req, res, next) => {
  let { body, out_trade_no, total_fee } = req.query
  total_fee *= 1
  // 1.设置需要的参数
  const appid = config.appid
  const mch_id = config.mch_id
  const nonce_str = getNoncestr() // 随机数
//   const body = '肥宅水'
//   const out_trade_no = 'sh2003____01'
//   const total_fee = 1
  const notify_url = config.notify_url
  const trade_type = 'NATIVE'
  
  // 设所有发送或者接收到的数据为集合M
  const M = {
    appid, mch_id, nonce_str, body, out_trade_no, total_fee, notify_url, trade_type
  }
  const sign = getSign(M) // 生成签名
  
  const xmldata = getXml(M, sign) // 转换成xml的数据

  // 调用统一下单接口，获取支付地址，获取到的是xml格式
  axios({
    url: config.unifiedorder,
    method: 'POST',
    data: xmldata
  }).then(response => {
     // 需要将xml格式转换为 js对象，通过js对象 获取code_url支付地址
     const resultObj = xml2js(response.data)
     const { code_url } = resultObj
     qrcode.toDataURL(code_url, (err, data) => {
       if (err) throw err
       res.send({
         code: '200',
         message: '生成支付二维码',
         data
       })
     })
  })
})

module.exports = router;